﻿# -*- coding: utf-8 -*-
# 
u"""
O trabalho destina-se a realizar uma aplicação com interface gráfica para o utilizador que processe
e apresente estatísticas de acerca da evolução dos salários da função pública em Portugal.
Estas estatísticas são:
• o índice de preços ao consumidor (IPC);
• a taxa de inflação;
• a remuneração mínima mensal dos funcionários públicos;
• a remuneração máxima mensal dos funcionários públicos;
• a evolução das remunerações máximas e mínimas mensais dos funcionários públicos a preços
constantes;
• o produto interno bruto anual (PIB) per capita;
• o rendimento nacional anual bruto per capita;
• o rendimento disponível anual bruto per capita;
• as remunerações per capita anuais.
Os gráficos devem permitir a análise mais fácil das estatísticas.
Os alunos têm como fonte de dados principal o ficheiro em formato Excel na página da disciplina,
designado por IPC_PORTUGAL_1977_2013.xls
"""
# modulo de operações de leitura e escrita sobre um ficheiro
# de base de dados sqlite3
# 
# IPBeja - Escola Superior de Tecnologia e Getão
# Engenharia Informática
# Elísio Gonçalves Ribeiro nº4708
# Em Outubro-2013


import sqlite3
import re

#
#Modulo utilizado no primeiro projecto da Disciplina de Linguagem de Programação
#que consiste em elaboração de uma aplicação capaz de fazer leituras dos dados
#num ficheiro excel (.xls) e a sua respectiva escrita dnum ficheiro de base de
#dados no formato sqlite.
#
##
##############################################################################
##

# metodo que cria uma ligaçao a um ficheiro sqlite no disco
# cria novo ficheiro no endereco indicado se não existir
#
def connectingTo_db(db_path):
    '''
    create a sqlite db connection to a file on the disk
    create new file with given name if it doesnt exist
    and returns the connection to the db
    bd_path - name or path to the db file on the disk
    '''
    try:
        # bd_path = endereco_bd.encode("utf8")        
        # conexao/criacao no disco da Base de Dados
        db_conn = sqlite3.connect(db_path)
    except:
        raise
    else:
        return db_conn
#
##
##############################################################################
# criação de tabelas apartir dos nomes das folhas+
# e dos valores das colunas
#
def creating_table(cursor, table_name, col_names, f_keys=None):
    '''
    create tables based on given parameters
    cursor     - cursor of a connected db
    table_name - table name to create in the db
    col_names  - list of tuples containing (<field>, <type>)
    '''
    try:
        pk = col_names[0]
        sql_cmd = 'CREATE TABLE IF NOT EXISTS {0} \
        ({1} PRIMARY KEY)'.format(table_name, pk)
        cursor.execute(sql_cmd)                                               #actually creating the table
        
        for field in col_names[1:]:
            sqlcmd = 'ALTER TABLE {0} ADD COLUMN {1};'.format(table_name, field)
            cursor.execute(sqlcmd)
    except: raise
#
##
###############################################################################
#recebe um cursor com ligaçao a db lista de dados a preencher na 
#tabela e a respectiva tabela e faz o preenchimento
#
def filling_dbTable(cursor, data_lst, table_name):
    '''
    uses table_name and colums_names to create sql_insert_statement
    then uses data_lst to fill the given table name
    cursor      - cursor of a connected db
    data_lst    - list of data to load on the db table
    table_name  - table name
    '''
    try:
        each_field = 'NULL,'+'?,'*len(data_lst[0])
        sql_insert = 'INSERT INTO {0} VALUES({1})'.format(table_name, each_field[:-1])
        res = cursor.executemany(sql_insert, data_lst)                                   #execute the above sql_insert_stments
    except: raise
#
##
##############################################################################
#metodo para confirmar a escrita dos 
#dadosno disco e fechar a ligaçãoo à base de dados
#
def turnOff_conn(bd_con, cursor):
    '''
    confirms the saving of all data on the disk
    and then do the close on all connections to the db
    db_conn  - a connection object of current db
    cursor   - the db cursor
    '''
    try:
        cursor.close()
        bd_con.commit()
        bd_con.close()
    except: return
#
#